Skip to main content
Version: Legacy SeeSo

API Docs (Java)

Overview

NametypeDescription
GazeTrackerclassA class that generates gaze tracking data
CameraPositionclassInformation of the screen origin for the camera to be set in GazeTracker
GazeInfoclassA class composed of information about eye tracking
FaceInfoclassA class composed of information about face.
UserStatusOptionclassThe class contains User Status options information for GazeTracker
InitializationCallbackinterfaceA callback interface that notifies the result when creating a gaze tracker
GazeTrackerCallbackinterfaceAll callbacks used in GazeTracker instance inherit from GazeTrackerCallback
StatusCallbackinterfaceAn interface that informs whether the Gaze Tracker is operating or not
GazeCallbackinterfaceAn interface to receive frame-by-frame GazeInfo
FaceCallbackinterfaceAn interface to receive frame-by-frame FaceInfo
CalibrationCallbackinterfaceAn interface used in the calibration process
UserStatusCallbackinterfaceAn interface used for user status function
ImageCallbackinterfaceAn interface that receives the image buffer from the front camera
InitializationErrorTypeenumAn enum that contains error types of InitializationCallback
StatusErrorTypeenumAn enum that contains error types of StatusCallback
TrackingStateenumAn enum that contains tracking state types of GazeInfo
EyeMovementStateenumAn enum that contains eye movement state types using at GazeInfo
ScreenStateenumAn enum that contains screen state types using at GazeInfo
CalibrationModeTypeenumAn enum that contains calibration mode types of startCalibartion
AccuracyCriteriaenumAn enum that contains accuracy criteria of startCalibartion

GazeTracker

public class GazeTracker

GazeTracker is the class that generates gaze tracking data from the video from the device's front camera.

Summary

Constructor and Destructor
initGazeTracker
initGazeTracker (with User Status Options)
deinitGazeTracker
Functions
getVersionName
startTracking
stopTracking
isTracking
isDeviceFound
addCameraPosition
getCameraPosition
getCameraPositionList
selectCameraPosition
setStatusCallback
removeStatusCallback
setGazeCallback
removeGazeCallback
setFaceCallback
removeFaceCallback
setTrackingFPS
setCameraPreview
removeCameraPreview
startCalibration
stopCalibration
isCalibrating
startCollectSamples
setCalibrationData
setCalibrationCallback
removeCalibrationCallback
setAttentionInterval
getAttentionScore
setAttentionRegion
getattentionRegion
removeattentionRegion
setUserStatusCallback
removeUserStatusCallback
setCallbacks
setImageCallback
removeImageCallback

getVersionName

public static String getVersionName()
ParametersTypeDescription
versionNamestringSeeSo SDK Version

Example

String version = GazeTracker.getVersionName();
System.out.println("SeeSo version :" + version);

initGazeTracker

public static void initGazeTracker(
Context context, String licenseKey, InitializationCallback callback)

GazeTracker construction process includes authentication.

This Function is asynchronous.

The created GazeTracker instance is delivered through InitializationCallback.

ParametersTypeDescription
contextandroid.content.Context
licenseKeyStringKey generated from SeeSo console page
callbackInitializationCallbackInitialized after alert Callback

Example

// Implement InitializationCallback
InitializationCallback initializationCallback = new InitializationCallback() {
@Override
public void onInitialized(GazeTracker gazeTracker, InitializationErrorType error) {
if (gazeTracker != null) {
// gazeTracker init success
} else {
// gazeTracker init fail
}
}
};

GazeTracker.initGazeTracker(context, "YOUR_LICENSE_KEY", initializationCallback);

initGazeTracker (with User Status Options)

public static void initGazeTracker(Context context, String licenseKey, InitializationCallback callback, UserStatusOption option)

GazeTracker construction requires authentication.

The function is asynchronous.

The created GazeTracker instance is delivered through InitializationCallback.

To use user status option, initialize using UserStatus.

ParametersTypeDescription
contextandroid.content.Context
licenseKeyStringKey generated from SeeSo console page
callbackInitializationCallbackInitialized after alert Callback
optionUserStatusOptionIt contains data about the function among the user status to be used

Example

// Implement InitializationCallback
InitializationCallback initializationCallback = new InitializationCallback() {
@Override
public void onInitialized(GazeTracker gazeTracker, InitializationErrorType error) {
if (gazeTracker != null) {
// gazeTracker init success
} else {
// gazeTracker init fail
}
}
};

UserStatusOption userStatusOption = new UserStatusOption();

if (isStatusAttention) {
userStatusOption.useAttention();
}
if (isStatusBlink) {
userStatusOption.useBlink();
}
if (isStatusDrowsiness) {
userStatusOption.useDrowsiness();
}

GazeTracker.initGazeTracker(context, "YOUR_LICENSE_KEY", initializationCallback, userStatusOption);

deinitGazeTracker

public static void deinitGazeTracker(GazeTracker gazeTracker)

After this is called, do not call gazeTracker's methods.

For memory optimization, assigning null to the destructed object is recommended.

ParametersTypeDescription
gazeTrackerGazeTrackerGazeTracker instance

Example

// Implement InitializationCallback
InitializationCallback initializationCallback = new InitializationCallback() {
@Override
public void onInitialized(GazeTracker gazeTracker, InitializationErrorType error) {
if (gazeTracker != null) {
// gazeTracker init success

// you can deinit gazeTracker instance
GazeTracker.deinitGazeTracker(gazeTracker);
gazeTracker = null;

} else {
// gazeTracker init fail
}
}
};

GazeTracker.initGazeTracker(context, "YOUR_LICENSE_KEY", initializationCallback);

startTracking

public synchronized void startTracking()

This function should be called before starting gaze-tracking.

On successful start, StatusCallback.onStarted() is called.

Example

private InitializationCallback initializationCallback = new InitializationCallback() {
@Override
public void onInitialized(GazeTracker gazeTracker, InitializationErrorType error) {
if (gazeTracker != null) {
// gazeTracker init success

// set StatusCallback
gazeTracker.setCallbacks(statusCallback);

// startTracking
gazeTracker.startTracking();

} else {
// gazeTracker init fail
}
}
};

private StatusCallback statusCallback = new StatusCallback() {
@Override
public void onStarted() {
// gazeTracker.startTracking() Success
}

@Override
public void onStopped(final StatusErrorType error) {
// gazeTracker.startTracking() Fail
}
};

GazeTracker.initGazeTracker(context, "YOUR_LICENSE_KEY", initializationCallback);

stopTracking

public synchronized void stopTracking()

This function is called to stop gaze tracking.

On successful stop, StatusCallback.onStopped() is called.

Example

// Implement StatusCallback and already set callback to gazeTracker
private StatusCallback statusCallback = new StatusCallback() {
@Override
public void onStarted() {

}

@Override
public void onStopped(final StatusErrorType error) {
// gazeTracker.stopTracking() Success
}
};

gazeTracker.stopTracking();

isTracking

public synchronized boolean isTracking()

This function represents the status of gaze tracking. It returns true when gaze tracking is working, false when gaze tracking is stopped.

Return TypeDescription
booleanIt is a return value indicating whether the tracking state is present

Example

boolean isTracking = gazeTracker.isTracking();
System.out.println("Tracking state : " + isTracking);

isDeviceFound

public boolean isDeviceFound()
Return TypeDescription
booleanif it was true, device was founded

Example

boolean isFound = tracker.isDeviceFound();
System.out.println("isDeviceFound " + isFound);

addCameraPosition

public void addCameraPosition(CameraPosition cameraPosition)

Add CameraPosition to GazeTracker instance.

ParametersTypeDescription
cameraPositionCameraPositionCameraPosition class

Example

CameraPosition cameraPosition = new CameraPosition("SM-T720", 1600f, 2560f, -72f, -4f);// tab s5e
tracker.addCameraPosition(cameraPosition);

getCameraPosition

public CameraPosition getCameraPosition()
Return TypeDescription
CameraPositionCameraPosition class

Example

CameraPosition cameraPosition = tracker.getCameraPosition();
System.out.println(cameraPosition.modelName + " : " + cameraPosition.screenOriginX + " : " + cameraPosition.screenOriginY);

getCameraPositionList

public ArrayList<CameraPosition> getCameraPositionList()
Return TypeDescription
ArrayList<CameraPosition>ArrayList of CameraPosition of the device. A device can have multiple CameraPosition (ex. Galaxy Fold)

Example

ArrayList<CameraPosition> cameraPositionList = tracker.getCameraPositionList();
for (CameraPosition cameraPosition : cameraPositionList) {
System.out.println(cameraPosition.modelName + " : " + cameraPosition.screenOriginX + " : " + cameraPosition.screenOriginY);
}

selectCameraPosition

public void selectCameraPosition(int idx)
ParametersTypeDescription
idxIntIndex of the CameraPosition to use from getCameraPositionList().

Example

tracker.selectCameraPosition(0);

setStatusCallback

public void setStatusCallback(StatusCallback callback)

Set StatusCallback implementations to gazeTracker.

ParametersTypeDescription
callbackStatusCallbackCallback implementation of the StatusCallback.

Example

//implement statusCallback
gazeTracker.setStatusCallback(statusCallback);

removeStatusCallback

public void removeStatusCallback()

Remove all StatusCallback implementations set in gazeTracker.


setGazeCallback

public void setGazeCallback(GazeCallback callback)

Set GazeCallback implementations to gazeTracker.

ParametersTypeDescription
gazeTrackerGazeCallbackCallback implementation of the GazeCallback

Example

//implement gazeCallback
private GazeCallback gazeCallback = new GazeCallback() {
@Override
public void onGaze(final GazeInfo gazeInfo) {
// do something
}
};

gazeTracker.setGazeCallback(gazeCallback);

removeGazeCallback

public void removeGazeCallback()

Remove all GazeCallback listeners.

Example

gazeTracker.removeGazeCallback();

setFaceCallback

public void setFaceCallback(FaceCallback faceCallback)

Set FaceCallback implementations to gazeTracker.

ParametersTypeDescription
gazeTrackerFaceCallbackCallback implementation of the FaceCallback

Example

//implement faceCallback
private FaceCallback faceCallback = new FaceCallback() {
@Override
public void onFace(FaceInfo faceInfo) {
// do something
}
};

gazeTracker.setFaceCallback(faceCallback);

removeFaceCallback

public void removeFaceCallback()

Remove all FaceCallback listeners.

Example

gazeTracker.removeFaceCallback();

setTrackingFPS

public boolean setTrackingFPS(int fps)

Limits the maximum FPS of the gaze tracking.
FPS should be between 1 and 30.

FPS can be dropped due to device spec.
The default value is 30.

ParametersTypeDescription
fpsintUpper bound of FPS(Frame Per Second) for gaze tracking
Return TypeDescription
booleanWhether it is applied at the set fps is returned as a result

Example

gazeTracker.setTrackingFPS(20);

setCameraPreview

public void setCameraPreview(android.view.TextureView cameraPreview)
ParametersTypeDescription
cameraPreviewandroid.view.TextureViewTextureView for camera preview

Example

TextureView preview = findViewById(R.id.preview);
gazeTracker.setCameraPreview(preview);

removeCameraPreview

public void removeCameraPreview()

Remove registered camera preview.

Example

gazeTracker.removeCameraPreview();

startCalibration

public boolean startCalibration(CalibrationModeType mode, AccuracyCriteria criteria, float left, float top, float right, float bottom)
public boolean startCalibration(CalibrationModeType mode, float left, float top, float right, float bottom)
public boolean startCalibration(CalibrationModeType mode)
public boolean startCalibration(float left, float top, float right, float bottom)
public boolean startCalibration(AccuracyCriteria criteria)
public boolean startCalibration(CalibrationModeType mode, AccuracyCriteria criteria)
public boolean startCalibration()

It returns true when parameters are valid.

It also returns false when the calibration region has been set outside of the device screen.

The false return will block the calibration process.

ParametersTypeDescription
modeCalibrationModeTypeCan select the calibration option. DEFAULT(=FIVE_POINT), ONE_POINT, FIVE_POINT, SIX_POINT
leftfloatRegion that needs calibration. The unit is px (default is 80% region of device screen)
topfloatRegion that needs calibration. The unit is px (default is 80% region of device screen)
rightfloatRegion that needs calibration. The unit is px (default is 80% region of device screen)
bottomfloatRegion that needs calibration. The unit is px (default is 80% region of device screen)
criteriaAccuracyCriteriaOption that manage calibration process and accuracy. Three options - DEFAULT, LOW, HIGH - are available. Default is DEFAULT
Return TypeDescription
booleanIt returns true when parameters are valid

Example

//implement calibrationCallback
private CalibrationCallback calibrationCallback = new TimeoutCalibrationCallback() {

@Override
public void onCalibrationProgress(final float progress) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// process calibration point UI
}
});
}

@Override
public void onCalibrationNextPoint(final float x, final float y) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// draw calibration point to (x,y)
}
});
handler.postDelayed(new Runnable() {
@Override
public void run() {
// After drawing the calibration point,
// call startCollectSamples after enough time (1,000 ms in this example) that considering user can recognize the point
gaze.startCollectSamples();
}
}, 1000);
}

@Override
public void onCalibrationFinished(double[] calibrationData) {
// saveCalibration(calibrationData);
runOnUiThread(
new Runnable() {
@Override
public void run() {
//remove calibration UI
}
});
}
};

gazeTracker.setCalibrationCallback(calibrationCallback);

// Example of using overloaded functions
boolean startedResult = gazeTracker.startCabliration(CalibrationModeType.ONE_POINT, 100, 100, 1000, 1200);
boolean startedResult = gazeTracker.startCabliration(CalibrationModeType.ONE_POINT);
boolean startedResult = gazeTracker.startCabliration(100, 100, 1000, 1200);
boolean startedResult = gazeTracker.startCabliration();

stopCalibration

public void stopCalibration()

Stop calibration.


isCalibrating

public boolean isCalibrating()

Return true when calibrating, false otherwise.

Return TypeDescription
booleanIt returns true when calibrating

startCollectSamples

public boolean startCollectSamples()

This relays the coordinates of the point that should be seen when calibration is in progress at the function: CalibrationCallback.onCalibrationNextPoint.

You should display coordinates on the screen and call startCollectSamples for calibration.

Return TypeDescription
booleanIt returns true when calibrating

setCalibrationData

public boolean setCalibrationData(double[] calibrationData)

Set existing calibration data to gazeTracker.

ParametersTypeDescription
calibrationDatadouble[]Calibration Data
Return TypeDescription
booleanCalibration Data loaded result

Example

//implement calibrationCallback
private CalibrationCallback calibrationCallback = new TimeoutCalibrationCallback() {

@Override
public void onCalibrationFinished(double[] calibrationData) {
// After calibration is finished, the data is automatically reflected in the current gazeTracker instance.
// You can save it and apply the saved value to the new gazeTracker instance when you restart the app later.
// savedCalibrationData = calibrationData;
}
};

gazeTracker.setCalibrationData(savedCalibrationData);

setCalibrationCallback

public void setCalibrationCallback(CalibrationCallback callback)

Set CalibrationCallback implementations to gazeTracker.

ParametersTypeDescription
callbackCalibrationCallbackCallbacks implementation of the CalibrationCallback

Example

//implement calibrationCallback
private CalibrationCallback calibrationCallback = new TimeoutCalibrationCallback() {

@Override
public void onCalibrationProgress(final float progress) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// process calibration point UI
}
});
}

@Override
public void onCalibrationNextPoint(final float x, final float y) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// draw calibration point to (x,y)
}
});
handler.postDelayed(new Runnable() {
@Override
public void run() {
// After drawing the calibration point,
// call startCollectSamples after enough time (1,000 ms in this example) that considering user can recognize the point
boolean isStart = gaze.startCollectSamples();
}
}, 1000);
}

@Override
public void onCalibrationFinished(double[] calibrationData) {
// saveCalibration(calibrationData);
runOnUiThread(
new Runnable() {
@Override
public void run() {
//remove calibration UI
}
});
}
};

gazeTracker.setCalibrationCallback(calibrationCallback);

removeCalibrationCallback

public void removeCalibrationCallback()

Remove all CalibrationCallback implementations set in gazeTracker.


setAttentionInterval

public void setAttentionInterval(int interval)

Set time interval for the UserStatusCallback.onAttention callback.

The UserStatus Attention score will be calculated for the given time interval.

The beginning and ending timestamps are passed through the onAttention callback as timestampBegin and timestampEnd.

The interval range is 10 to 60 (seconds), and the default value is 30 seconds.

ParametersTypeDescription
intervalintTime interval for the UserStatus Attention score

Example

private InitializationCallback initializationCallback = new InitializationCallback() {
@Override
public void onInitialized(GazeTracker gazeTracker, InitializationErrorType error) {
if (gazeTracker != null) {
// gazeTracker init success
// set StatusCallback

gazeTracker.setCallbacks(statusCallback);
// set UserStatus Attention Interval
gazeTracker.setAttentionInterval(30);
} else {
// gazeTracker init fail
}
}
};

getAttentionScore

public float getAttentionScore()

Get current Attention score from the GazeTracker.

This API does not provide timestamp of the Attention score data.

Use onAttention callback, unless the Attention score is required at a specific time/location.

Return TypeDescription
floatCurrent Attention score

setAttentionRegion

public void setAttentionRegion(float left, float top, float right, float bottom)

Set Attention ROI

ParametersTypeDescription
leftfloatLeft boundary of attention region. The unit is px
topfloatTop boundary of attention region. The unit is px
rightfloatRight boundary of attention region. The unit is px
bottomfloatBottom boundary of attention region. The unit is px
note

Device screen region is set as default.

Example

// Set attention region that (x,y) = (100,100), (width, height) = 100,100
setattentionRegion(100, 100, 200, 200);

getAttentionRegion

public float[] getAttentionRegion()
Return TypeDescription
float[]If the region is not set, returns an empty array. Otherwise, returns left, top, right, bottom passed from setAttentionRegion

removeAttentionRegion

public void removeAttentionRegion()

Remove Attention ROI


setUserStatusCallback

public void setUserStatusCallback(UserStatusCallback callback)
ParametersTypeDescription
callbackUserStatusCallbackSet UserStatusCallback implementations to gazeTracker.

Example

//implement gazeCallback
private UserStatusCallback userStatusCallback = new UserStatusCallback() {
@Override
public void onAttention(final long timestampBegin, final long timestampEnd, final float score) {}

@Override
public void onDrowsiness(final long timestamp, final boolean isDrowsiness) {}

@Override
public void onBlink(final long timestamp, final boolean isBlinkLeft, final boolean isBlinkRight, final boolean isBlink, final float eyeOpenness) {}
};
gazeTracker.setUserStatusCallback(userStatusCallback);

removeUserStatusCallback

public void removeUserStatusCallback()

Remove all UserStatusCallback implementations set in gazeTracker


setCallbacks

public void setCallbacks(GazeTrackerCallback callback...)

Set GazeTrackerCallback implementations to gazeTracker.

ParametersTypeDescription
callbackGazeTrackerCallbackCallbacks implementation of the GazeTrackerCallback.

Example

//implement statusCallback, gazeCallback, imageCallback, calibrationCallback, userStatusCallback
gazeTracker.setCallbacks(statusCallback, gazeCallback, imageCallback, calibrationCallback, userStatusCallback);

setImageCallback

public void setImageCallback(ImageCallback callback)

Set ImageCallback implementations to gazeTracker.

ParametersTypeDescription
callbackImageCallbackCallbacks implementation of the ImageCallback.

Example

//implement imageCallback
private ImageCallback imageCallback = new ImageCallback() {
@Override
public void onImage(long timestamp, final byte[] buffer) {
uiHandler.post(new Runnable() {
@Override
public void run() {
ByteArrayOutputStream out = new ByteArrayOutputStream();
YuvImage yuvImage = new YuvImage(buffer, ImageFormat.NV21, 640, 480, null);
yuvImage.compressToJpeg(new Rect(0, 0, 640, 480), 50, out);
byte[] imageBytes = out.toByteArray();
Bitmap image = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
imgBuffer.setImageBitmap(image);
}
});
}
};
gazeTracker.setImageCallback(imageCallback);

removeImageCallback

public void removeImageCallback()

Remove all ImageCallback implementations set in gazeTracker.


CameraPosition

public class CameraPosition {
public String modelName;
public float screenWidth;
public float screenHeight;
public float screenOriginX;
public float screenOriginY;
public boolean cameraOnLongerAxis;
}

This class indicates the relative position from the camera to the screen origin. GazeTracker uses the information to calculate gaze coordinate.

For more information, see gaze coordinate

Summary

Variablestypedescription
modelNameStringDevice model name
screenWidthfloatThe current screen width size of the device being used, measured in pixels.
screenHeightfloatThe current screen height size of the device being used, measured in pixels.
screenOriginXfloatX's Distance from the camera to the top left corner of the screen (mm)
screenOriginYfloatY's Distance from the camera to the top left corner of the screen (mm)
cameraOnLongerAxisbooleanA boolean value representing when the camera is placed on the device's long axis.

GazeInfo

public class GazeInfo {
public long timestamp;
public float x, y;
public float fixationX, fixationY;
public float leftOpenness, rightOpenness;
public TrackingState trackingState;
public EyeMovementState eyeMovementState;
public ScreenState screenState;
}

A class composed of information about eye tracking.

Variablestypedescription
timestamplongTimestamp of gaze point. The unit is millisecond. The time format is UTC
xfloatx coordinate value of gaze point. Origin is device screen. The unit is pixel(px)
yfloaty coordinate value of gaze point. Origin is device screen. The unit is pixel(px)
fixationXfloatx coordinate value of last fixation point. Origin is device screen. The unit is pixel(px)
fixationYfloaty coordinate value of last fixation point. Origin is device screen. The unit is pixel(px)
leftOpennessfloatopenness degree of left eye(0.0~1.0). value will only return when userStatusOption in on
rightOpennessfloatopenness degree of right eye(0.0~1.0). value will only return when userStatusOption in on
trackingStateTrackingStateSUCCESS, LOW_CONFIDENCE, UNSUPPORTED, FACE_MISSING
eyeMovementStateEyeMovementStateFIXATION, SACCADE, UNKNOWN
screenStateScreenStateINSIDE_OF_SCREEN, OUTSIDE_OF_SCREEN, UNKNOWN


FaceInfo

public class FaceInfo {
public long timestamp;
public float score;
public Size frameSize;
public float left, top, right, bottom;
public float pitch, yaw, roll;
public float centerX, centerY, centerZ;
}

A class composed of information about eye tracking.

Variablestypedescription
timestamplongTimestamp of gaze point. The unit is millisecond. The time format is UTC
scorefloatValue of facial recognition confidence (0.0 ~ 1.0).
frameSizeandroid.util.Sizecamera frame size.
left, top, right, bottomfloatIt represents the location of the face with a rectangular box. The four sides of the box indicate the four positions of the face within the image.
pitchfloatPitch is the rotation around the X-axis of an object. It is also known as the attitude angle. In aviation, it is often referred to as the nose-up or nose-down angle.
yawfloatYaw is the rotation around the Y-axis of an object. It is also known as the heading angle. In aviation, it is often referred to as the bearing or compass angle.
rollfloatRoll is the rotation around the Z-axis of an object. It is also known as the bank angle. In aviation, it is often referred to as the wing-up or wing-down angle.
centerX, centerY, centerZfloatThe x,y,z distance of the center of the face from the camera. The unit is mm.
warning
  • When the camera is positioned at the top, we defined it as 0 degrees. (pitch, yaw, roll)

UserStatusOption

public class UserStatusOption

The class contains User Status options information for GazeTracker

Summary

functions
isUseAttention
isUseBlink
isUseDrowsiness
useAttention
useBlink
useDrowsiness
useAll

isUseAttention

isUseDrowsiness

public boolean isUseAttention()
public boolean isUseBlink()
public boolean isUseDrowsiness()
Return TypeDescription
booleanReturn true if the flag is on, false otherwise

useAttention

useDrowsiness

public void useAttention()
public void useBlink()
public void useDrowsiness()

Set flags.


useAll

public void useAll()

Set All User Status flag.


InitializationCallback

public interface InitailizationCallback

Summary

function
onInitialized

onInitialized

public void onInitailzed(GazeTracker tracker, InitializationErrorType error);

This is callback function being called when GazeTracker.initGazeTracker function has been called.

See Authentication for more details.

ParametersTypeDescription
trackerGazeTrackerGazeTracker Instance
errorInitializationErrorTypeError code

Example

public void onInitialized(GazeTracker tracker, InitializationErrorType error){
if (tracker != null) {
this.tracker = tracker;
} else {
switch (error) {
case InitializationErrorType.ERROR_NONE:
break;
case InitializationErrorType.ERROR_INIT:
break;

...
}
}
}

GazeTrackerCallback

public interface GazeTrackerCallback

Base interface for callbacks.


StatusCallback

public interface StatusCallback extends GazeTrackerCallback

Summary

function
onStarted
onStopped

onStarted

public void onStarted()

The function that automatically called after GazeTracker.startTracking() if initialization succeeds. Calibration is available after this.

Example

@Override
public void onStarted() {
gazeTracker.startCalibration();
}

onStopped

public void onStopped(StatusErrorType error)
ParameterstypeDescription
errorStatusErrorTypeError code

Example

@Override
public void onStopped(StatusErrorType error) {
if (error != StatusCallback.ERROR_NONE) {
// onStopped with error
} else {
// onStopped without error
}
}

GazeCallback

public interface GazeCallback extends GazeTrackerCallback

Summary

Function
onGaze

onGaze

public void onGaze(GazeInfo gazeInfo)
ParametersTypeDescription
gazeInfoGazeInfoPassing the gaze info value according to the frame

Example

private GazeCallback gazeCallback = new GazeCallback() {
@Override
public void onGaze(final GazeInfo gazeInfo) {

}
};

gazeTracker.setCallbacks(gazeCallback);


FaceCallback

public interface FaceCallback extends GazeTrackerCallback

Summary

Function
onFace

onFace

public void onFace(FaceInfo faceInfo)
ParametersTypeDescription
faceInfoFaceInfoPassing the face info value according to the frame

Example

private FaceCallback faceCallback = new FaceCallback() {
@Override
public void onFace(final FaceInfo faceInfo) {

}
};

gazeTracker.setCallbacks(faceCallback);

CalibrationCallback

public interface CalibrationCallback extends GazeTrackerCallback

Summary

Functions
onCalibrationNextPoint
onCalibrationProgress
onCalibrationFinished

onCalibrationNextPoint

public void onCalibrationNextPoint(float x, float y)

The x, y coordinate value of the gaze point that should be focused on during the calibration process.

Also, a proper UI should be on screen for notify the calibration target point.

You should call startCollectSamples to process the calibration.

ParametersTypeDescription
xfloatThe x coordinate value of the gaze point that should be focused on during the calibration process. Origin is the device screen. The unit is pixel(px)
yfloatThe Y coordinate value of the gaze point that should be focused on during the calibration process. Origin is the device screen. The unit is pixel(px)

Example

@Override
public void onCalibrationNextPoint(float x, float y) {
// Draw Calibration Point(x,y) in view.

// than call startCollectSamples to proceed calibration.
gazeTracker.startCollectSamples();
}

onCalibrationProgress

public void onCalibrationProgress(float progress)

This is callback that represent the calibration progression.
The value will be between 0.0 and 1.0.

The value increases when startCollectSamples function is called.

ParametersTypeDescription
progressfloatCalibration progression for each point
note

Visualizing the calibration progression with proper UI is recommended to improve UX.


onCalibrationFinished

public void onCalibrationFinished(double[] calibrationData)

This is callback function that notify when all calibration step finished.

The calibrationData passed as a parameter has already been applied to GazeTracker.

You can save it for later use.

E.g: Not re-calibrating when restarting the app, by passing the stored data via GazeTracker.setCalibrationData.

ParametersTypeDescription
calibrationDatadouble[]Calibration data

Example

public void onCalibrationFinished(double[] calibrationData) {
// remove calibration UI, save calibration data
removeCalibrationUI();
saveCalibrationDataForLaterUse(calibrationData);
}

UserStatusCallback

public interface UserStatusCallback extends GazeTrackerCallback

The User Status includes Attention, Drowsiness, and Blink.

  1. Attention: How much the user attention is focused on the screen content for interval time (0.0 ~ 1.0)

  2. Drowsiness: If the user feel drowsiness (True/False)

  3. Blink: If the user blink eyes (left eye, right eye, general(both eyes))

Summary

Functions
onAttention
onDrowsiness
onBlink

onAttention

  public void onAttention(long timestampBegin, long timestampEnd, float score)
  1. Timestamp range of the data will be passed as timestampBegin and timestampEnd.
  2. The default time interval is 30 seconds(see setAttentionInterval).
  3. If the user attention level is low, score will be close to 0.0.
  4. If the user attention level is high, score will be close to 1.0.
ParametersTypeDescription
timestampBeginlongBeginning Timestamp of the data
timestampEndlongEnding Timestamp of the data
scorefloatUser Attention rate score between the timestamps

Example

private UserStatusCallback userStatusCallback = new UserStatusCallback() {
@Override
public void onAttention(long timestampBegin, long timestampEnd, float score) {
// do something
}
};

gazeTracker.setUserStatusCallback(userStatusCallback);

onDrowsiness

  public void onDrowsiness(long timestamp, boolean isDrowsiness, float intensity)
  1. Timestamp of the data will be passed as timestamp.
  2. isDrowsiness is true if the user seems drowsy, false otherwise.
  3. intensity parameter represents the level of drowsiness, ranging from 0 to 1, where a value closer to 0 indicates no drowsiness and a value closer to 1 indicates a high intensity of drowsiness.
ParametersTypeDescription
timestamplongTimestamp of the data
isDrowsinessbooleanUser drowsiness flag
intensityfloatLevel of drowsiness intensity (0 to 1)

Example

private UserStatusCallback userStatusCallback = new UserStatusCallback() {
@Override
public void onDrowsiness(final long timestamp, final boolean isDrowsiness, final float intensity) {
// do something
}
};

gazeTracker.setUserStatusCallback(userStatusCallback);

public void onBlink(long timestamp, boolean isBlinkLeft, boolean isBlinkRight, boolean isBlink, float leftOpenness, float rightOpenness)
  1. Timestamp of the data will be passed as timestamp.
  2. isBlinkLeft is true if the user blinks their left eye, false otherwise.
  3. isBlinkRight is true if the user blinks their right eye, false otherwise.
  4. isBlink is true if one blinks their eye, false otherwise(This is a general blink condition).
  5. If the user's eyes are wide open, leftOpenness, rightOpenness in onBlink callback will be close to 1.0.
  6. If the user's eyes are closed, leftOpenness, rightOpenness in onBlink callback will be close to 0.0.
ParametersTypeDescription
timestamplongTimestamp of the data
isBlinkLeftbooleanUser left blink flag
isBlinkRightbooleanUser right blink flag
isBlinkbooleanUser blink flag
leftOpennessfloatUser left eye-openness rate
rightOpennessfloatUser right eye-openness rate

Example

private UserStatusCallback userStatusCallback = new UserStatusCallback() {
@Override
public void onBlink(final long timestamp, final boolean isBlinkLeft, final boolean isBlinkRight, final boolean isBlink, final float eyeOpenness) {
// do something
}
};

gazeTracker.setUserStatusCallback(userStatusCallback);

ImageCallback

public interface ImageCallback extends GazeTrackerCallback

Front Camera Image buffer callback.

Summary

Functions
onImage

onImage

public void onImage(long timestamp, byte[] image)
ParametersTypeDescription
timestamplongTimestamp of the image in milliseconds. The time format is UTC
imagebyte[]byte[] of image. format is YUV(NV21), width = 640, height = 480

Example

@Override
public void onImage(long timestamp, byte[] image){
try {
File file = new File(yourJpgFilePath);
FileOutputStream out = new FileOutputStream(file);
YuvImage yuvImage = new YuvImage(image, ImageFormat.NV21, 640, 480, null);
yuvImage.compressToJpeg(new Rect(0, 0, 640, 480), 50, out);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}

InitializationErrorType

public enum InitializationErrorType

Contains error types of InitializationCallback.

See Authentication for more details.


StatusErrorType

public enum StatusErrorType

Contains error types of StatusCallback.

NameDescription
ERROR_NONESucceed without error
ERROR_CAMERA_STARTGazeTracker.startTracking is called but the front camera of the device is not available
ERROR_CAMERA_INTERRUPTThe camera stream is disturbed(i.e. used by other applications) or the application running at the background

TrackingState

public enum TrackingState

Contains tracking state used at GazeInfo.

NameDescription
SUCCESSFace alignment is in a best position (Gaze tracking success, with valid x and y)
LOW_CONFIDENCEFace alignment is not in the best position, but can be used for tracking (Gaze tracking success, with less accurate x and y)
UNSUPPORTEDFace alignment is not suitable for tracking (Gaze tracking fail, with invalid x and y)
FACE_MISSINGFace is missing (Gaze tracking fail)

EyeMovementState

public enum EyeMovementState

Contains eye movement state used at GazeInfo.

NameDescription
FIXATIONGazes from the past and the gazes up to the present have made a fixation
SACCADEGazes from the past and the gazes up to the present have formed a saccade
UNKNOWNNot fixation or saccade

ScreenState

public enum ScreenState

Contains screen state used at GazeInfo.

NameDescription
INSIDE_OF_SCREENGaze tracking succeeds and the gaze point is inside of the device screen
OUTSIDE_OF_SCREENGaze tracking succeeds and the gaze point is outside of the device screen
UNKNOWNGaze tracking failed

CalibrationModeType

public enum CalibrationModeType

Contains calibration mode types of startCalibartion

NameDescription
DEFAULTSet to the recommended mode. In the current version, Five-point calibration mode
ONE_POINTOne-point calibration mode
FIVE_POINTFive-point calibration mode
SIX_POINTSix-point calibration mode

AccuracyCriteria

public enum AccuracyCriteria

Contains accuracy criteria of startCalibartion.

NameDescription
DEFAULTDefault calibration accuracy criteria
LOWLow calibration accuracy criteria
HIGHHigh calibration accuracy criteria